/**
 * \file InterfaceQTImage.h
 * \author Florian LANCE - Armand POLI
 * \version 1.0
 * \date octobre 2011
 */


#ifndef INTERFACEQTIMAGE_H
#define INTERFACEQTIMAGE_H

#include <QImage>
#include "Image.h"

/**
* @class Classe InterImage, permet d'interfacer la librairie Image avec Qt
*/
template <unsigned int T_DIM>
class InterImage
{
public:
    InterImage(const Image<T_DIM>&);

    /** @brief Retourne l'image initialisee a partir d'une QImage en parametre*/
    Image<T_DIM> initImage(const QImage);

    /** @brief Retourne la QImage initialisée à partir de tab en NVG */
    QImage *getQImageNVG();

private:
    Image<T_DIM> img; /**< Image de dimension T_DIM */
};


template <unsigned int T_DIM>
InterImage<T_DIM>::InterImage(const Image<T_DIM>& _img) : img(_img) {}

template <unsigned int T_DIM>
Image<T_DIM> InterImage<T_DIM>::initImage(const QImage _Qimg)
{
    img.setLargeur(_Qimg.width());
    img.setHauteur(_Qimg.height());
    img.setValMaxPGM(255);

    std::vector<Pixel<1> > tab;

    for(unsigned int j = 0; j < img.getHauteur(); j++)
    {
        for(unsigned int i = 0; i < img.getLargeur(); i++)
        {
            QRgb p(_Qimg.pixel(i,j));
            tab.push_back(qGray(p));
        }
    }
    img.setTab(tab, img.getHauteur()*img.getLargeur() );

    return img;
}

template <unsigned int T_DIM>
QImage *InterImage<T_DIM>::getQImageNVG()
{
    QImage *q = new QImage(img.getLargeur(), img.getHauteur(), QImage::Format_RGB32);

    for(unsigned int j = 0; j < img.getHauteur(); j++)
    {
        for(unsigned int i = 0; i < img.getLargeur(); i++)
        {
            uint val;
            int valeurPixel = img.getValPixel(i,j,0);

            val = valeurPixel;
            q->setPixel(i,j, qRgb(val,val,val));
        }
    }
    return q;
}

#endif // INTERFACEQTIMAGE_H
